{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Mini-Project: SVM & LR Classification\n",
    "\n",
    "There are two natural dependent variables in our dataset: label and attack_cat. Initial approach is to prep the existing variables for classification and throw in the \"kitchen sink\" and use all features in the dataset to baseline our accuracy. We then investigate what variables my be cross correlated, or less weight and remove them to see if we can increase our accuracy.\n",
    "\n",
    "In this mini-project, we decided upon trying two different LR classifications and two different SVM classifications. The first LR and SVM classification is on the full dataset, variable \"df\" in our code and referred to as the \"kitchen sink\" model. We then tried doing the LR and SVM classification on the five most correlated features to the label feature, our dependent variable. We'll refer to this one as the \"five-feature\" model, which is represented by the variable \"df_five\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### References:\n",
    "http://stats.stackexchange.com/questions/123632/how-does-support-vector-machine-compare-to-logistic-regression\n",
    "https://github.com/eclarson/DataMiningNotebooks/blob/master/04.%20Logits%20and%20SVM.ipynb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# imports\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "from sklearn.cross_validation import ShuffleSplit\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn import metrics as mt\n",
    "from sklearn.svm import SVC\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings\n",
    "warnings.simplefilter('ignore', DeprecationWarning)\n",
    "\n",
    "pd.set_option('display.max_columns', None)    # set the max columns to show to unlimited\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 82332 entries, 0 to 82331\n",
      "Data columns (total 6 columns):\n",
      "sttl                82332 non-null int64\n",
      "ct_dst_sport_ltm    82332 non-null int64\n",
      "ct_src_dport_ltm    82332 non-null int64\n",
      "swin                82332 non-null int64\n",
      "dwin                82332 non-null int64\n",
      "label               82332 non-null int64\n",
      "dtypes: int64(6)\n",
      "memory usage: 3.8 MB\n"
     ]
    }
   ],
   "source": [
    "df = pd.read_csv('UNSW_NB15_training_set.csv', encoding='utf-8-sig')  # specifing encoding to get rid of the UTF- Byte order Mark (BOM) in the id field\n",
    "df_five = pd.read_csv('miniLab.csv') # read in the five features most correlated to the label feature\n",
    "\n",
    "df_five.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 82332 entries, 0 to 82331\n",
      "Data columns (total 45 columns):\n",
      "id                   82332 non-null int64\n",
      "dur                  82332 non-null float64\n",
      "proto                82332 non-null object\n",
      "service              82332 non-null object\n",
      "state                82332 non-null object\n",
      "spkts                82332 non-null int64\n",
      "dpkts                82332 non-null int64\n",
      "sbytes               82332 non-null int64\n",
      "dbytes               82332 non-null int64\n",
      "rate                 82332 non-null float64\n",
      "sttl                 82332 non-null int64\n",
      "dttl                 82332 non-null int64\n",
      "sload                82332 non-null float64\n",
      "dload                82332 non-null float64\n",
      "sloss                82332 non-null int64\n",
      "dloss                82332 non-null int64\n",
      "sinpkt               82332 non-null float64\n",
      "dinpkt               82332 non-null float64\n",
      "sjit                 82332 non-null float64\n",
      "djit                 82332 non-null float64\n",
      "swin                 82332 non-null int64\n",
      "stcpb                82332 non-null int64\n",
      "dtcpb                82332 non-null int64\n",
      "dwin                 82332 non-null int64\n",
      "tcprtt               82332 non-null float64\n",
      "synack               82332 non-null float64\n",
      "ackdat               82332 non-null float64\n",
      "smean                82332 non-null int64\n",
      "dmean                82332 non-null int64\n",
      "trans_depth          82332 non-null int64\n",
      "response_body_len    82332 non-null int64\n",
      "ct_srv_src           82332 non-null int64\n",
      "ct_state_ttl         82332 non-null int64\n",
      "ct_dst_ltm           82332 non-null int64\n",
      "ct_src_dport_ltm     82332 non-null int64\n",
      "ct_dst_sport_ltm     82332 non-null int64\n",
      "ct_dst_src_ltm       82332 non-null int64\n",
      "is_ftp_login         82332 non-null int64\n",
      "ct_ftp_cmd           82332 non-null int64\n",
      "ct_flw_http_mthd     82332 non-null int64\n",
      "ct_src_ltm           82332 non-null int64\n",
      "ct_srv_dst           82332 non-null int64\n",
      "is_sm_ips_ports      82332 non-null int64\n",
      "attack_cat           82332 non-null object\n",
      "label                82332 non-null int64\n",
      "dtypes: float64(11), int64(30), object(4)\n",
      "memory usage: 28.3+ MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "duplicate record deleted successfully: 82328 observations remaining\n"
     ]
    }
   ],
   "source": [
    "# Lets remove attributes that are not useful to us during this first analysis pass\n",
    "non_useful_features_list = ['id', 'attack_cat']\n",
    "#non_useful_features_list = ['id'] # Re,pved attacl_cat/ LR accuracy: 0.754888861897\n",
    "# id: n internal variable to just ref an obseration. deemed not usefl\n",
    "# attack_cat: first try and just predict the label. \n",
    "#             It will obviously 1:1 correlate with label\n",
    "#             We can circle back and swap it out with label \n",
    "#             to see if we get any better accuracy on an \n",
    "#             on an attack type level\n",
    "for feature in non_useful_features_list:\n",
    "    if feature in df:\n",
    "        df.drop(feature, axis=1, inplace=True)  # Lets drop id as it is an internal variable to just ref an obseratio\n",
    "\n",
    "# Overwrite the existing dataframe with the new dataframe that does not contain the \n",
    "# four unwanted records and confirm we have 4 less records (shold have 82328 observations)\n",
    "if \"is_ftp_login\" in df:\n",
    "    df = df[df.is_ftp_login != 2]\n",
    "    if len(df) == 82328:\n",
    "        print \"duplicate record deleted successfully: \" + str(len(df)) + \" observations remaining\" \n",
    "\n",
    "# Check to see if non useful features still exist in dataframe, if so, we did something wrong\n",
    "for feature in non_useful_features_list:\n",
    "    if feature in df:\n",
    "        print \"[\" + feature + \"]\" + \"still found, check removal code. (Should not see this)\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 82328 entries, 0 to 82331\n",
      "Data columns (total 43 columns):\n",
      "dur                  82328 non-null float64\n",
      "proto                82328 non-null object\n",
      "service              82328 non-null object\n",
      "state                82328 non-null object\n",
      "spkts                82328 non-null int64\n",
      "dpkts                82328 non-null int64\n",
      "sbytes               82328 non-null int64\n",
      "dbytes               82328 non-null int64\n",
      "rate                 82328 non-null float64\n",
      "sttl                 82328 non-null int64\n",
      "dttl                 82328 non-null int64\n",
      "sload                82328 non-null float64\n",
      "dload                82328 non-null float64\n",
      "sloss                82328 non-null int64\n",
      "dloss                82328 non-null int64\n",
      "sinpkt               82328 non-null float64\n",
      "dinpkt               82328 non-null float64\n",
      "sjit                 82328 non-null float64\n",
      "djit                 82328 non-null float64\n",
      "swin                 82328 non-null int64\n",
      "stcpb                82328 non-null int64\n",
      "dtcpb                82328 non-null int64\n",
      "dwin                 82328 non-null int64\n",
      "tcprtt               82328 non-null float64\n",
      "synack               82328 non-null float64\n",
      "ackdat               82328 non-null float64\n",
      "smean                82328 non-null int64\n",
      "dmean                82328 non-null int64\n",
      "trans_depth          82328 non-null int64\n",
      "response_body_len    82328 non-null int64\n",
      "ct_srv_src           82328 non-null int64\n",
      "ct_state_ttl         82328 non-null int64\n",
      "ct_dst_ltm           82328 non-null int64\n",
      "ct_src_dport_ltm     82328 non-null int64\n",
      "ct_dst_sport_ltm     82328 non-null int64\n",
      "ct_dst_src_ltm       82328 non-null int64\n",
      "is_ftp_login         82328 non-null int64\n",
      "ct_ftp_cmd           82328 non-null int64\n",
      "ct_flw_http_mthd     82328 non-null int64\n",
      "ct_src_ltm           82328 non-null int64\n",
      "ct_srv_dst           82328 non-null int64\n",
      "is_sm_ips_ports      82328 non-null int64\n",
      "label                82328 non-null int64\n",
      "dtypes: float64(11), int64(29), object(3)\n",
      "memory usage: 27.6+ MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>proto</th>\n",
       "      <th>service</th>\n",
       "      <th>state</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>82328</td>\n",
       "      <td>82328</td>\n",
       "      <td>82328</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>unique</th>\n",
       "      <td>131</td>\n",
       "      <td>13</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>top</th>\n",
       "      <td>tcp</td>\n",
       "      <td>-</td>\n",
       "      <td>FIN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>freq</th>\n",
       "      <td>43091</td>\n",
       "      <td>47153</td>\n",
       "      <td>39335</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        proto service  state\n",
       "count   82328   82328  82328\n",
       "unique    131      13      7\n",
       "top       tcp       -    FIN\n",
       "freq    43091   47153  39335"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe(include=['O']) # Surround in try except incase there are no object type features"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on this, lets one-hot encode the above categorical variables. Note expect number of\n",
    "features to increase based on sum of unique values. so $$43 + 131 + 13 + 7 - 3 = 191$$\n",
    "Must subtract $3$ for the 3 original colums that exist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# http://stackoverflow.com/questions/19482970/get-list-from-pandas-dataframe-column-headers\n",
    "\n",
    "# Surrounding code in try/except on case where there are no object type features to one-hot encode\n",
    "try:\n",
    "    tmp_df = df.describe(include=['O'])  # creates a temporary df with just categorical features that are of object type\n",
    "    categorical_object_col_name_list = tmp_df.columns.values.tolist()\n",
    "    for col_name in categorical_object_col_name_list:\n",
    "        #print col_name\n",
    "        tmp_df = pd.get_dummies(df[col_name], prefix=col_name)\n",
    "        df = pd.concat((df,tmp_df), axis=1)\n",
    "        df.drop(col_name, axis=1, inplace=True)  # go ahead and drop original feature as it has now been one-hot encoded\n",
    "except ValueError as e:\n",
    "    print \"Value error({0}): \".format(e)  # Note"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 82328 entries, 0 to 82331\n",
      "Columns: 191 entries, dur to state_RST\n",
      "dtypes: float64(162), int64(29)\n",
      "memory usage: 120.6 MB\n"
     ]
    }
   ],
   "source": [
    "df.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic Regression\n",
    "Now let's use Logistic Regression from `scikit-learn`. The documentation can be found here:\n",
    "\n",
    "http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ShuffleSplit(82328, n_iter=3, test_size=0.2, random_state=None)\n"
     ]
    }
   ],
   "source": [
    "# we want to predict the X and y data as follows:\n",
    "if 'label' in df:\n",
    "    y = df['label'].values # get the labels we want\n",
    "    del df['label'] # get rid of the class label\n",
    "    X = df.values # use everything else to predict!\n",
    "\n",
    "    # X and y are now numpy matrices, by calling 'values' on the pandas data frames we\n",
    "    # have converted them into simple matrices to use with scikit learn\n",
    "    \n",
    "    \n",
    "# to use the cross validation object in scikit learn, we need to grab an instance\n",
    "# of the object and set it up. This object will be able to split our data into \n",
    "# training and testing splits\n",
    "num_cv_iterations = 3\n",
    "num_instances = len(y)\n",
    "cv_object = ShuffleSplit(n=num_instances,\n",
    "                         n_iter=num_cv_iterations,\n",
    "                         test_size  = 0.2)\n",
    "                         \n",
    "print cv_object"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.75337058  0.75525325  0.75482813]\n",
      "Average Accuracy across 3 shuffle split cross validation iterations = 0.754483987206\n"
     ]
    }
   ],
   "source": [
    "# first we create a reusable logisitic regression object\n",
    "# here we can setup the object with different learning parameters and constants\n",
    "lr_clf = LogisticRegression(penalty='l2', C=1.0, class_weight=None) # get object\n",
    "for train_indices, test_indices in cv_object:\n",
    "    X_train = X[train_indices]\n",
    "    y_train = y[train_indices]\n",
    "    \n",
    "    X_test = X[test_indices]\n",
    "    y_test = y[test_indices]\n",
    "    \n",
    "    # train the reusable logisitc regression model on the training data\n",
    "    lr_clf.fit(X_train,y_train)  # train object\n",
    "    y_hat = lr_clf.predict(X_test)\n",
    "\n",
    "accuracies = cross_val_score(lr_clf, X, y=y, cv=cv_object) # this also can help with parallelism\n",
    "print(accuracies)\n",
    "print \"Average Accuracy across \" + str(num_cv_iterations) + \" shuffle split cross validation iterations = \" + str(np.average(accuracies))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0.76928216  0.76715657  0.76569902]\n",
      "Average Accuracy across 3 shuffle split cross validation iterations = 0.767379246123\n"
     ]
    }
   ],
   "source": [
    "# we want to predict the X and y data as follows for df_five:\n",
    "if 'label' in df_five:\n",
    "    y_five = df_five['label'].values # get the labels we want\n",
    "    del df_five['label'] # get rid of the class label\n",
    "    X_five = df_five.values # use everything else to predict!\n",
    "\n",
    "    # X and y are now numpy matrices, by calling 'values' on the pandas data frames we\n",
    "    # have converted them into simple matrices to use with scikit learn\n",
    "    \n",
    "    \n",
    "# to use the cross validation object in scikit learn, we need to grab an instance\n",
    "# of the object and set it up. This object will be able to split our data into \n",
    "# training and testing splits\n",
    "num_cv_iterations = 3\n",
    "num_instances_five = len(y)\n",
    "cv_object_five = ShuffleSplit(n=num_instances_five,\n",
    "                         n_iter=num_cv_iterations,\n",
    "                         test_size  = 0.2)\n",
    "\n",
    "# first we create a reusable logisitic regression object\n",
    "# here we can setup the object with different learning parameters and constants\n",
    "lr_clf_five = LogisticRegression(penalty='l2', C=1.0, class_weight=None) # get object\n",
    "\n",
    "for train_indices, test_indices in cv_object_five:\n",
    "    X_train_five = X[train_indices]\n",
    "    y_train_five = y[train_indices]\n",
    "    \n",
    "    X_test_five = X[test_indices]\n",
    "    y_test_five = y[test_indices]\n",
    "    \n",
    "    # train the reusable logisitc regression model on the training data\n",
    "    lr_clf_five.fit(X_train_five, y_train_five)  # train object\n",
    "    y_hat_five = lr_clf_five.predict(X_test_five)\n",
    "    \n",
    "accuracies_five = cross_val_score(lr_clf_five, X_five, y=y_five, cv=cv_object_five) # this also can help with parallelism\n",
    "print(accuracies_five)\n",
    "print \"Average Accuracy across \" + str(num_cv_iterations) + \" shuffle split cross validation iterations = \" + str(np.average(accuracies_five))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Tried \"`l1`\" and \"`l2`\", a '`C`' as high as 2.0 and as low as 0.05, and `class_weight` of \"None\" and \"Balanced\" and still got the best accuracy with the this `lr_clf = LogisticRegression(penalty='l2', C=1.0, class_weight=None)` model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Analysis:\n",
    "    We see that the five-feature model performs slightly better (one percent on average) than the kitchen sink model, 76.8% to 75.3%, respectively. Interpretting the weights of each model may give us insight as to why there is a difference"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Interpretting weights\n",
    "Okay, so now lets take the models for logistic regression and try to interpret the weights."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(u'dur', 'has weight of', 8.68028522203702e-11)\n",
      "(u'spkts', 'has weight of', 9.9251135755035939e-10)\n",
      "(u'dpkts', 'has weight of', 1.5465338391157435e-09)\n",
      "(u'sbytes', 'has weight of', 1.2033775050618821e-06)\n",
      "(u'dbytes', 'has weight of', 2.335357996058891e-06)\n",
      "(u'rate', 'has weight of', 9.1317862452710543e-06)\n",
      "(u'sttl', 'has weight of', 2.5011956271733406e-08)\n",
      "(u'dttl', 'has weight of', 6.3909157966725779e-09)\n",
      "(u'sload', 'has weight of', -1.8773042163582781e-09)\n",
      "(u'dload', 'has weight of', -2.7441702712699513e-06)\n",
      "(u'sloss', 'has weight of', 3.8852143902106041e-10)\n",
      "(u'dloss', 'has weight of', 8.7355995193033847e-10)\n",
      "(u'sinpkt', 'has weight of', -4.3227869279958647e-07)\n",
      "(u'dinpkt', 'has weight of', -1.6362855068104674e-08)\n",
      "(u'sjit', 'has weight of', -1.581296867364659e-07)\n",
      "(u'djit', 'has weight of', 2.0084064039401869e-08)\n",
      "(u'swin', 'has weight of', -5.3377528046987095e-09)\n",
      "(u'stcpb', 'has weight of', -2.1194158561685808e-11)\n",
      "(u'dtcpb', 'has weight of', -3.2455592396256935e-11)\n",
      "(u'dwin', 'has weight of', -1.019976862874151e-09)\n",
      "(u'tcprtt', 'has weight of', -4.605256590144888e-12)\n",
      "(u'synack', 'has weight of', -3.5468553271223033e-12)\n",
      "(u'ackdat', 'has weight of', -1.0584012630226002e-12)\n",
      "(u'smean', 'has weight of', 2.5591511130281564e-09)\n",
      "(u'dmean', 'has weight of', 1.453135491926664e-08)\n",
      "(u'trans_depth', 'has weight of', 7.8230657238292939e-12)\n",
      "(u'response_body_len', 'has weight of', 2.610083323020877e-07)\n",
      "(u'ct_srv_src', 'has weight of', 1.5693912184103799e-09)\n",
      "(u'ct_state_ttl', 'has weight of', 1.1408529398367517e-10)\n",
      "(u'ct_dst_ltm', 'has weight of', 1.0584676508306068e-09)\n",
      "(u'ct_src_dport_ltm', 'has weight of', 1.2895907992662204e-09)\n",
      "(u'ct_dst_sport_ltm', 'has weight of', 1.067708301282111e-09)\n",
      "(u'ct_dst_src_ltm', 'has weight of', 1.2399822761993554e-09)\n",
      "(u'is_ftp_login', 'has weight of', 3.8826564597001926e-13)\n",
      "(u'ct_ftp_cmd', 'has weight of', 3.4154267933549821e-13)\n",
      "(u'ct_flw_http_mthd', 'has weight of', -9.2249644567687895e-12)\n",
      "(u'ct_src_ltm', 'has weight of', 1.1971578216489056e-09)\n",
      "(u'ct_srv_dst', 'has weight of', 1.5605186318317348e-09)\n",
      "(u'is_sm_ips_ports', 'has weight of', -7.2870125094805439e-12)\n",
      "(u'proto_3pc', 'has weight of', 2.1114206390589958e-13)\n",
      "(u'proto_a/n', 'has weight of', 7.6418931317439674e-14)\n",
      "(u'proto_aes-sp3-d', 'has weight of', 1.8029535725836371e-13)\n",
      "(u'proto_any', 'has weight of', 4.5238296583053326e-13)\n",
      "(u'proto_argus', 'has weight of', 1.8342143201105898e-13)\n",
      "(u'proto_aris', 'has weight of', 1.8515310476991037e-13)\n",
      "(u'proto_arp', 'has weight of', -7.8422623613251974e-12)\n",
      "(u'proto_ax.25', 'has weight of', 1.7478596563820434e-13)\n",
      "(u'proto_bbn-rcc', 'has weight of', 1.3374074766604242e-13)\n",
      "(u'proto_bna', 'has weight of', 1.1845197938611333e-13)\n",
      "(u'proto_br-sat-mon', 'has weight of', 1.9608072396888311e-13)\n",
      "(u'proto_cbt', 'has weight of', 2.5454263239642654e-13)\n",
      "(u'proto_cftp', 'has weight of', 2.012531598170117e-13)\n",
      "(u'proto_chaos', 'has weight of', 1.6311051413273426e-13)\n",
      "(u'proto_compaq-peer', 'has weight of', 1.8215662910835367e-13)\n",
      "(u'proto_cphb', 'has weight of', 1.242714576123727e-13)\n",
      "(u'proto_cpnx', 'has weight of', 2.0377962913100425e-13)\n",
      "(u'proto_crtp', 'has weight of', 1.0720183584501531e-13)\n",
      "(u'proto_crudp', 'has weight of', 8.0531610850820552e-14)\n",
      "(u'proto_dcn', 'has weight of', 1.6007828399369428e-13)\n",
      "(u'proto_ddp', 'has weight of', 1.6380909120146627e-13)\n",
      "(u'proto_ddx', 'has weight of', 1.2243779110575556e-13)\n",
      "(u'proto_dgp', 'has weight of', 1.1844029319870989e-13)\n",
      "(u'proto_egp', 'has weight of', 1.2817566369562216e-13)\n",
      "(u'proto_eigrp', 'has weight of', 1.1650901819412384e-13)\n",
      "(u'proto_emcon', 'has weight of', 1.1255946537627494e-13)\n",
      "(u'proto_encap', 'has weight of', 1.409853725212584e-13)\n",
      "(u'proto_etherip', 'has weight of', 1.0600313902634866e-13)\n",
      "(u'proto_fc', 'has weight of', 1.9780497407297347e-13)\n",
      "(u'proto_fire', 'has weight of', 7.2269240539418053e-14)\n",
      "(u'proto_ggp', 'has weight of', 1.4716293159945089e-13)\n",
      "(u'proto_gmtp', 'has weight of', 1.6380667373063661e-13)\n",
      "(u'proto_gre', 'has weight of', 4.7212345940763687e-13)\n",
      "(u'proto_hmp', 'has weight of', 1.7259645135733014e-13)\n",
      "(u'proto_i-nlsp', 'has weight of', 1.3362016379392546e-13)\n",
      "(u'proto_iatp', 'has weight of', 1.6338833985453821e-13)\n",
      "(u'proto_ib', 'has weight of', 2.0586929894135807e-13)\n",
      "(u'proto_idpr', 'has weight of', 1.0605049696355192e-13)\n",
      "(u'proto_idpr-cmtp', 'has weight of', 1.5129501618776289e-13)\n",
      "(u'proto_idrp', 'has weight of', 1.4687139759533692e-13)\n",
      "(u'proto_ifmp', 'has weight of', 1.0794785602499604e-13)\n",
      "(u'proto_igmp', 'has weight of', -2.415710662952698e-13)\n",
      "(u'proto_igp', 'has weight of', 1.484516078846311e-13)\n",
      "(u'proto_il', 'has weight of', 2.1576866534768112e-13)\n",
      "(u'proto_ip', 'has weight of', 1.184900928004547e-13)\n",
      "(u'proto_ipcomp', 'has weight of', 1.8427448202220306e-13)\n",
      "(u'proto_ipcv', 'has weight of', 9.0750823723090796e-14)\n",
      "(u'proto_ipip', 'has weight of', 1.9355425442728185e-13)\n",
      "(u'proto_iplt', 'has weight of', 1.5382816177315092e-13)\n",
      "(u'proto_ipnip', 'has weight of', 1.1897398078245756e-13)\n",
      "(u'proto_ippc', 'has weight of', 1.0547051219136488e-13)\n",
      "(u'proto_ipv6', 'has weight of', 2.3301692536601898e-13)\n",
      "(u'proto_ipv6-frag', 'has weight of', 1.8144381299996983e-13)\n",
      "(u'proto_ipv6-no', 'has weight of', 1.3934308237508304e-13)\n",
      "(u'proto_ipv6-opts', 'has weight of', 1.3186272727677706e-13)\n",
      "(u'proto_ipv6-route', 'has weight of', 1.7093330306102333e-13)\n",
      "(u'proto_ipx-n-ip', 'has weight of', 1.6189691140083995e-13)\n",
      "(u'proto_irtp', 'has weight of', 1.3848737105691976e-13)\n",
      "(u'proto_isis', 'has weight of', 1.2556106063949645e-13)\n",
      "(u'proto_iso-ip', 'has weight of', 8.3436803669874526e-14)\n",
      "(u'proto_iso-tp4', 'has weight of', 1.5129501652869136e-13)\n",
      "(u'proto_kryptolan', 'has weight of', 1.5655133811420552e-13)\n",
      "(u'proto_l2tp', 'has weight of', 2.0137912736353925e-13)\n",
      "(u'proto_larp', 'has weight of', 1.7694733284730178e-13)\n",
      "(u'proto_leaf-1', 'has weight of', 9.6530013949941516e-14)\n",
      "(u'proto_leaf-2', 'has weight of', 1.5752485708985969e-13)\n",
      "(u'proto_merit-inp', 'has weight of', 1.3622520275033807e-13)\n",
      "(u'proto_mfe-nsp', 'has weight of', 1.330110496878482e-13)\n",
      "(u'proto_mhrp', 'has weight of', 1.7903874891205027e-13)\n",
      "(u'proto_micp', 'has weight of', 1.2670445872583445e-13)\n",
      "(u'proto_mobile', 'has weight of', 3.0529845607265027e-13)\n",
      "(u'proto_mtp', 'has weight of', 9.6402639200998524e-14)\n",
      "(u'proto_mux', 'has weight of', 2.5454102881172993e-13)\n",
      "(u'proto_narp', 'has weight of', 1.7586857569921947e-13)\n",
      "(u'proto_netblt', 'has weight of', 2.0806975933052291e-13)\n",
      "(u'proto_nsfnet-igp', 'has weight of', 1.4250698582599479e-13)\n",
      "(u'proto_nvp', 'has weight of', 1.7307209448060443e-13)\n",
      "(u'proto_ospf', 'has weight of', 4.5810659914952934e-12)\n",
      "(u'proto_pgm', 'has weight of', 1.7405118326520642e-13)\n",
      "(u'proto_pim', 'has weight of', 2.8756905120528734e-13)\n",
      "(u'proto_pipe', 'has weight of', 1.6026326957051751e-13)\n",
      "(u'proto_pnni', 'has weight of', 1.6486779339873811e-13)\n",
      "(u'proto_pri-enc', 'has weight of', 1.1893641666294165e-13)\n",
      "(u'proto_prm', 'has weight of', 1.7217373499473349e-13)\n",
      "(u'proto_ptp', 'has weight of', 1.4250698535443843e-13)\n",
      "(u'proto_pup', 'has weight of', 1.0762777411844548e-13)\n",
      "(u'proto_pvp', 'has weight of', 2.1530322244962019e-13)\n",
      "(u'proto_qnx', 'has weight of', 1.2855105264760576e-13)\n",
      "(u'proto_rdp', 'has weight of', 5.536880541031427e-14)\n",
      "(u'proto_rsvp', 'has weight of', 1.9273392661062657e-13)\n",
      "(u'proto_rvd', 'has weight of', 2.5459720903691941e-13)\n",
      "(u'proto_sat-expak', 'has weight of', 1.5094369855024451e-13)\n",
      "(u'proto_sat-mon', 'has weight of', 1.8745503212919169e-13)\n",
      "(u'proto_sccopmce', 'has weight of', 1.3598378158360448e-13)\n",
      "(u'proto_scps', 'has weight of', 1.4490748720809589e-13)\n",
      "(u'proto_sctp', 'has weight of', 2.008921902788649e-12)\n",
      "(u'proto_sdrp', 'has weight of', 1.7195659946961717e-13)\n",
      "(u'proto_secure-vmtp', 'has weight of', 1.6476481209364563e-13)\n",
      "(u'proto_sep', 'has weight of', 2.7575650348066659e-13)\n",
      "(u'proto_skip', 'has weight of', 1.9399540743819005e-13)\n",
      "(u'proto_sm', 'has weight of', 1.2776236713999427e-13)\n",
      "(u'proto_smp', 'has weight of', 1.6690629360827105e-13)\n",
      "(u'proto_snp', 'has weight of', 1.0743082410884021e-13)\n",
      "(u'proto_sprite-rpc', 'has weight of', 1.5740284597447034e-13)\n",
      "(u'proto_sps', 'has weight of', 1.4296896992229351e-13)\n",
      "(u'proto_srp', 'has weight of', 1.1711120917191104e-13)\n",
      "(u'proto_st2', 'has weight of', 2.9370164137931318e-13)\n",
      "(u'proto_stp', 'has weight of', 7.4426144692138308e-14)\n",
      "(u'proto_sun-nd', 'has weight of', 3.8457236563379768e-13)\n",
      "(u'proto_swipe', 'has weight of', 3.5561524059342182e-13)\n",
      "(u'proto_tcf', 'has weight of', 1.115962641274902e-13)\n",
      "(u'proto_tcp', 'has weight of', -2.097548696414375e-11)\n",
      "(u'proto_tlsp', 'has weight of', 1.3937712717817821e-13)\n",
      "(u'proto_tp++', 'has weight of', 1.9534386473014066e-13)\n",
      "(u'proto_trunk-1', 'has weight of', 1.6489754401716362e-13)\n",
      "(u'proto_trunk-2', 'has weight of', 1.7682261254283617e-13)\n",
      "(u'proto_ttp', 'has weight of', 1.4978365404085376e-13)\n",
      "(u'proto_udp', 'has weight of', 5.2440063351803035e-11)\n",
      "(u'proto_unas', 'has weight of', 1.6970885219795338e-11)\n",
      "(u'proto_uti', 'has weight of', 1.5084071637133201e-13)\n",
      "(u'proto_vines', 'has weight of', 1.6421977790424418e-13)\n",
      "(u'proto_visa', 'has weight of', 7.9763543510239189e-14)\n",
      "(u'proto_vmtp', 'has weight of', 1.7995616918731034e-13)\n",
      "(u'proto_vrrp', 'has weight of', 1.9493732537572662e-13)\n",
      "(u'proto_wb-expak', 'has weight of', 1.6490170978464874e-13)\n",
      "(u'proto_wb-mon', 'has weight of', 1.7245730472299797e-13)\n",
      "(u'proto_wsn', 'has weight of', 1.2593459587929298e-13)\n",
      "(u'proto_xnet', 'has weight of', 1.4143192918688729e-13)\n",
      "(u'proto_xns-idp', 'has weight of', 1.1096479242335562e-13)\n",
      "(u'proto_xtp', 'has weight of', 1.7656112426956837e-13)\n",
      "(u'proto_zero', 'has weight of', 1.9848578850956085e-13)\n",
      "(u'service_-', 'has weight of', -3.5959345117550929e-11)\n",
      "(u'service_dhcp', 'has weight of', 1.9580546700175507e-13)\n",
      "(u'service_dns', 'has weight of', 7.8816231044234822e-11)\n",
      "(u'service_ftp', 'has weight of', 1.5287059666207629e-12)\n",
      "(u'service_ftp-data', 'has weight of', -4.2385496428519879e-13)\n",
      "(u'service_http', 'has weight of', 1.2664126279334541e-11)\n",
      "(u'service_irc', 'has weight of', 4.2373428056817292e-14)\n",
      "(u'service_pop3', 'has weight of', 4.3365757545839842e-12)\n",
      "(u'service_radius', 'has weight of', 2.9298838036185914e-14)\n",
      "(u'service_smtp', 'has weight of', 6.7462922350786339e-12)\n",
      "(u'service_snmp', 'has weight of', 1.4609777009284813e-13)\n",
      "(u'service_ssh', 'has weight of', -8.5965217094458511e-13)\n",
      "(u'service_ssl', 'has weight of', 2.1048545974009033e-13)\n",
      "(u'state_ACC', 'has weight of', 8.795760395956672e-15)\n",
      "(u'state_CLO', 'has weight of', 1.0423828708787159e-14)\n",
      "(u'state_CON', 'has weight of', -2.7269048574275866e-11)\n",
      "(u'state_FIN', 'has weight of', 9.8837055825703198e-12)\n",
      "(u'state_INT', 'has weight of', 1.0111679439918703e-10)\n",
      "(u'state_REQ', 'has weight of', -1.6267767554032943e-11)\n",
      "(u'state_RST', 'has weight of', -9.7634525516081585e-15)\n"
     ]
    }
   ],
   "source": [
    "# Kitchen Sink Model\n",
    "weights = lr_clf.coef_.T # take transpose to make a column vector\n",
    "variable_names = df.columns\n",
    "weight_list = []\n",
    "for coef, name in zip(weights,variable_names):\n",
    "    print(name, 'has weight of', coef[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('sttl', 'has weight of', 5.751360385208197e-11)\n",
      "('ct_dst_sport_ltm', 'has weight of', 7.7476185500195847e-10)\n",
      "('ct_src_dport_ltm', 'has weight of', 1.107544085374592e-09)\n",
      "('swin', 'has weight of', 8.2713421852892032e-07)\n",
      "('dwin', 'has weight of', 1.6031127070757823e-06)\n"
     ]
    }
   ],
   "source": [
    "# Five-feature Model\n",
    "weights = lr_clf_five.coef_.T # take transpose to make a column vector\n",
    "variable_names = df_five.columns\n",
    "for coef, name in zip(weights,variable_names):\n",
    "    print(name, 'has weight of', coef[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "These weight interpretations are not neccessarily interpretable because of the values we had. Very large/small attribute values could just as easily be assigned a higher weight. Instead, let's normalize the feature values so that all the attributes are on the same dynamic range. Once we normalize the attributes, the weights should have magnitudes that reflect their predictive power in the logistic regression model.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('accuracy:', 0.91874164945949233)\n",
      "[[6790  639]\n",
      " [ 699 8338]]\n",
      "top features based on largest postive weights (normalized) (Largest to smallest)\n",
      "(u'dttl', 4.1113494938565545)\n",
      "top features based on largest negative weights (normalized) (Smallest to Largest)\n",
      "(u'ct_dst_src_ltm', -4.2485540523456828)\n"
     ]
    }
   ],
   "source": [
    "# Kitchen Sink Model\n",
    "\n",
    "# we want to normalize the features based upon the mean and standard deviation of each column. \n",
    "# However, we do not want to accidentally use the testing data to find out the mean and std (this would be snooping)\n",
    "# to Make things easier, let's start by just using whatever was last stored in the variables:\n",
    "##    X_train , y_train , X_test, y_test (they were set in a for loop above)\n",
    "\n",
    "# scale attributes by the training set\n",
    "scl_obj = StandardScaler()\n",
    "scl_obj.fit(X_train) # find scalings for each column that make this zero mean and unit std\n",
    "# the line of code above only looks at training data to get mean and std and we can use it \n",
    "# to transform new feature data\n",
    "\n",
    "X_train_scaled = scl_obj.transform(X_train) # apply to training\n",
    "X_test_scaled = scl_obj.transform(X_test) # apply those means and std to the test set (without snooping at the test set values)\n",
    "\n",
    "# train the model just as before\n",
    "lr_clf = LogisticRegression(penalty='l2', C=0.05) # get object, the 'C' value is less (can you guess why??)\n",
    "lr_clf.fit(X_train_scaled,y_train)  # train object\n",
    "\n",
    "y_hat = lr_clf.predict(X_test_scaled) # get test set precitions\n",
    "\n",
    "acc = mt.accuracy_score(y_test,y_hat)\n",
    "conf = mt.confusion_matrix(y_test,y_hat)\n",
    "print('accuracy:', acc )\n",
    "print(conf )\n",
    "\n",
    "# sort these attributes and spit them out\n",
    "zip_vars = zip(lr_clf.coef_.T,df.columns) # combine attributes\n",
    "zip_vars.sort(key = lambda t: np.abs(t[0])) # sort them by the magnitude of the weight\n",
    "weight_list_normalized = []\n",
    "for coef, name in zip_vars:\n",
    "    #print(name, 'has weight of', coef[0]) # now print them out\n",
    "    weight_list_normalized.append((name, coef[0]))  \n",
    "    \n",
    "    \n",
    "weight_list_normalized.sort(key=lambda x:x[1])\n",
    "print \"top features based on largest postive weights (normalized) (Largest to smallest)\"\n",
    "print weight_list_normalized[-1]\n",
    "\n",
    "print \"top features based on largest negative weights (normalized) (Smallest to Largest)\"\n",
    "print weight_list_normalized[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAf4AAAG6CAYAAADppiRfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XmcHGW1//HPzMRACARCUFAU3PCoASVs7gpcUdArCKL8\nFBdkU5Qd2VR29QqyB5BNFhUvuLAom4IBVBYFuSBEOCqgIDtJIJgEQmbm98epTno6PZOZ7qdqprq+\n79crr8zUTNfp7qmuU/Us5+nq7+9HREREqqF7tJ+AiIiIFEeJX0REpEKU+EVERCpEiV9ERKRClPhF\nREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpk3Gg/gUZPP/38iEoJdnd3seqqE5k9ex59fflX\nISwyXqfGKjpep8YqOl6nxio6nl5b+WIVHa+dWC9/+Updy9x/y89sjOju7qKrq4vu7mW+1tLF69RY\nRcfr1FhFx+vUWEXH02srX6yi4+Udq/SJX0RERIZPiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJ\nX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRC\nlPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQnJL/GZ2\nlZmdl9f+RUREZORySfxm9v+ArfLYt4iIiLRuXOodmtlk4DjgT6n3XZSFCxcyc+Y9TX/W09PNpEkT\nmDt3Ab29fQN+NnXqeowfP76IpygiItKS5IkfOB74IbBmDvsuxMyZ93DQiZey0pS1hv2Y52c9zHH7\nw7RpG+b4zERERNqTNPGb2ebA+4D1gDNT7rtoK01Zi1XWWGe0n4aIiEhSyfr4zWw5Itl/xd1fTLVf\nERERSSflHf+RwO3ufn07O+nu7qK7u2vYv9/T0z3g/xRa3VdPTzfjxqV/Hilf21iIVXS8To1VdLxO\njVV0PL228sUqOl7esVIm/h2A1c3s+ez75QDMbHt3nzTcnay66kS6uoaf+GsmTZow4sek3tekSROY\nPHlisudRv9+iFBmr6HidGqvoeJ0aq+h4em3li1V0vLxipUz8HwBeVvf9cUA/cNBIdjJ79rwR3/EP\nNsq+VXPnLmj5cXPmzEvyHCCf1zYWYhUdr1NjFR2vU2MVHU+vrXyxio7XTqzh3HwmS/zu/kj999md\nf7+7PzSS/fT19dPX1z/i+L29fSxalOaP0eofNeVzKGK/ox2r6HidGqvoeJ0aq+h4em3li1V0vLxi\nqWSviIhIheQxjx8Ad/9iXvsWERGR1uiOX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4\nRUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpE\niV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESk\nQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpELGjfYT\nECmjhQsXMnPmPUtt7+npZtKkCcydu4De3r6lfj516nqMHz++iKcoItKUEr9IC2bOvIeDTryUlaas\nNezHPD/rYY7bH6ZN2zDHZyYiMjQlfpEWrTRlLVZZY53RfhoiIiOiPn4REZEKUeIXERGpECV+ERGR\nClHiFxERqRAlfhERkQpR4hcREakQJX4REZEKUeIXERGpECV+ERGRClHiFxERqRAlfhERkQpR4hcR\nEakQJX4REZEKUeIXERGpECV+ERGRClHiFxERqZBxqXdoZq8CTgU2A+YDPwUOdfeFqWOJiIjIyCRP\n/MAvgFnAe4ApwPnAIuDgHGKJiIjICCRN/GZmwCbA6u7+TLbtcOB7KPGLiIiMutR9/E8AW9aSfqYL\nWDlxHBEREWlB0jt+d38OuK72vZl1AXsC16eMIyIiIq3Jo4+/3veA9YGNco4jIiIiw5Bb4jezY4G9\ngU+5+33DfVx3dxfd3V3DjtPT0z3g/xRa3VdPTzfjxqV/Hilf21iIVXQ8HSOKNZbi6bWVL1bR8fKO\nlUviN7PpwJeAHd398pE8dtVVJ9LVNfzEXzNp0oQRPyb1viZNmsDkyROTPY/6/RalyFhFx9Mxolhj\nKZ5eW/liFR0vr1h5zOM/Atgd2MHdLxvp42fPnjfiO/5JkyYwd+4Cenv7RhquqblzF7T8uDlz5iV5\nDpDPaxsLsYqOp2NEscZSPL228sUqOl47sYZzY5F6Ot9bgG8C3wFuMbPVaz9z9yeHs4++vn76+vpH\nHLu3t49Fi9L8MVr9o6Z8DkXsd7RjFR1Px4hijaV4em3li1V0vLxipe5A2Drb5zeBx7J/j2f/i4iI\nyChLPZ3vWODYlPsUERGRdLRIj4iISIUo8YuIiFSIEr+IiEiF5F25T0REpCULFy5k5sx7mv5sWVPe\npk5dj/Hjx+f9FEtJiV9ERMakmTPv4aATL2WlKWuN6HHPz3qY4/aHadM2zOmZlZsSv4iIjFkrTVmL\nVdZYZ7SfRkdRH7+IiEiFKPGLiIhUiBK/iIhIhSjxi4iIVIgG94nIYpo+JdL5lPhFZDFNnxLpfEr8\nImNc0Xfhmj4l0tmU+EXGON2Fi0hKSvySG/UXp6O7cBFJRYlfcqM7VRGRsUeJX3KlO1URkbFFiV9E\npORa7VZTl1o1KfGLiJRcK91q6lKrLiV+EZEOoG41GS6V7BUREakQ3fFLR9DUQRGR4VHil46gqYMi\nIsOjxC8dQ32cIiLLpsQvIpWg7iCRoMQvIpWg7iCRoMQvIpWh7iARTecTERGpFCV+ERGRClHiFxER\nqRAlfhERkQpR4hcREakQJX4REZEKUeIXERGpECV+ERGRClHiFxERqRAlfhERkQpR4hcREakQJX4R\nEZEKUeIXERGpECV+ERGRClHiFxERqRAlfhERkQpR4hcREakQJX4REZEKUeIXERGpECV+ERGRClHi\nFxERqRAlfhERkQpR4hcREamQcal3aGbLAWcA2wHzgRPc/cTUcURERGTk8rjjPx7YANgU+ApwhJlt\nl0McERERGaGkid/MVgB2AfZ297vd/QrgOGDPlHFERESkNanv+N9OdB/cWrftD8A7EscRERGRFqRO\n/K8EnnH3RXXbngSWN7MpiWOJiIjICKVO/CsALzZsq32/XOJYIiIiMkKpR/W/wNIJvvb9/OHsoLu7\ni+7urgHbFi5cyL333jPo76+44vL85z8v0NfXv9TP1113PcaPHz+c0Iv19HTz/KyHR/SY52c9TE/P\nJowbN7JrqSJfWxneR2jtvSwyVqvxiozVaryi38fBjsmyH49l+KyV4Zw1Vo5HGPq1tfI3K/oYqdfV\n37/0TltlZu8CbgKWd/e+bNumwJXuvuJw9tHf39/f1TUw8d9+++3sdtiPWGnKWiN6Ps/Pephzjvkc\nG2+88Yget3DhQu6+++4RPQbg7W9/+4j/GEW+trK8jzDy97LIWO3EKzJWK/GKfh9bOSbLcDyW5bM2\n1s9ZnXw85vg+dg32g5rUd/x3AS8B7wRuyba9D7h9uDuYPXveUnf8c+cuYKUpa7HKGuuM+AnNnbuA\nOXPmjfhxb3zjW5tu7+npZtKkCcydu4De3r4BP5s37yXmzXtpxM+vqNdWlvcRWnsvi4w1WLwiY+UV\nr8hYrR6TY/14LMtnbayfs6Bzj8e83sfJkycu8/FJE7+7LzCzHwJnmtnOwKuBA4AvDHcffX39SzVt\nNPujDldvbx+LFrX++Lz3W+Rr6+T3scqxio6XMlarx+RYPx47+bM21l5bWY/H0Xwfk1fuA/YnKvfN\nAJ4DDsvm84uIiMgoS5743X0B8MXsn4iIiIwhWqRHRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9E\nRKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4\nRUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpE\niV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRCxo32Exiu52c93OJj\nNkr/ZBIr8rV18vsoIiLLVorEP3Xqehy3f/Of9fR0M2nSBObOXUBvb1/DTzdi6tT1cn9+7SjytXXy\n+ygy1ugiW8aqUiT+8ePHM23ahk1/Nm5cN5MnT2TOnHksWtSYsMa+Il9bJ7+PImOJLrJlLCtF4hcR\nKRNdZMtYpsF9IiIiFaLELyIiUiFK/CIiIhWiPn4REZFRMFozP5T4RURECjaaMz+U+EVERAo2mjM/\n1McvIiJSIbrjFxERyYy0372M1RaV+EVEZEQ6tRxxa/3u5au2qMQvIiLD1snliKtScVGJX0REhq0q\nybGTaXCfiIhIhSjxi4iIVIgSv4iISIUo8YuIiFSIEr+IiEiFKPGLiIhUSNLpfGa2MnAC8N/ERcVV\nwL7u/lzKOCIiItKa1Hf8ZwHrAVsCHwLeApydOIaIiIi0KFniN7MVgO2Ar7r7Xe5+F7AvsK2ZjU8V\nR0RERFqX8o6/j2jiv7tuWxfQA6yYMI6IiIi0KFkfv7u/APymYfM+wF/cfXaqOCIiItK6ESV+M1se\nWHOQHz/u7vPrfndPYHvgw60/PREREUlppHf87wBuAPqb/Gxb4JcAZvYV4BRgH3f/7UgCdHd30d3d\nNezf7+npHvB/3oqM16mxio7XqbGKjpdHrFb31dPTzbhx6Z9HWd/HsRKvU2MVHS/vWCNK/O5+E8sY\nF2BmXwOOAw5w99NG+oRWXXUiXV3DT/w1kyZNGPFj2lFkvE6NVXS8To1VdLyUsVrd16RJE5g8eWKy\n51G/36LoGClfrKLj5RUr9Tz+LwDHEnf601vZx+zZ80Z8xz/4+s/pFRmvU2MVHa9TYxUdL49Yc+cu\naPlxc+bMS/IcoPzv41iJ16mxio7XTqzhXBAnS/xmNhmYDlwI/NTMVq/78dPuPqxn39fXT19fs56E\nofX29hW6/nOR8To1VtHxOjVW0fFSxmr1BJrX6y3r+zjW4nVqrKLj5RUrZQfCh4CJwBeAx7J/j2f/\nvzphHBEREWlRyul8lwCXpNqfiIiIpKdFekRERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJ\nX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRC\nlPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RURE\nKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9E\nRKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4\nRUREKkSJX0REpEKU+EVERCpEiV9ERKRClPhFREQqRIlfRESkQpT4RUREKkSJX0REpEKU+EVERCpE\niV9ERKRCckv8Zna6md2Q1/5FRERk5HJJ/Gb2buDLQH8e+xcREZHWJE/8ZvYy4CzgltT7FhERkfbk\nccd/KHA3cH0O+xYREZE2JE38ZvZmool/v5T7FRERkTTGjeSXzWx5YM1Bfvw40cR/uLs/bWbtPjcR\nERFJbESJH3gHcAPNB+0dCnS7+7ntPKHu7i66u7uG/fs9Pd0D/s9bkfE6NVbR8To1VtHx8ojV6r56\neroZNy798yjr+zhW4nVqrKLj5R2rq78/zcB7M5sBvAtYlG0aD/QA84G3uvu/h7Of/v7+/q6u4Sd+\nESmv22+/nf1PvolV1lhn2I959om/c+K+H2DjjTfO8ZmJlNYyE+hI7/iHsiMwoe77fYBNgM8Ajw13\nJ7NnzxvxHf+kSROYO3cBvb19w35cq4qM16mxio7XqbGKjpdHrLlzF7T8uDlz5iV5DlD+93GsxOvU\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xd02a668>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "std_scl = StandardScaler()\n",
    "lr_clf = LogisticRegression(penalty='l2', C=0.05) \n",
    "threshold = 1 \n",
    "# create the pipline\n",
    "piped_object = Pipeline([('scale', std_scl), ('logit_model', lr_clf)])\n",
    "\n",
    "# run the pipline corssvalidated\n",
    "for iter_num, (train_indices, test_indices) in enumerate(cv_object):\n",
    "    piped_object.fit(X[train_indices],y[train_indices])  # train object\n",
    "    \n",
    "# it is a little odd getting trained objects from a  pipeline:\n",
    "trained_model_from_pipeline = piped_object.named_steps['logit_model']\n",
    "\n",
    "# now look at the weights\n",
    "weights = pd.Series(trained_model_from_pipeline.coef_[0],index=df.columns)\n",
    "temp_df = pd.DataFrame(weights)\n",
    "temp_df = temp_df[(temp_df[0] > threshold) | (temp_df[0] < (-1 * threshold))]\n",
    "weights = temp_df[0]\n",
    "weights.plot(kind='bar')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Use the weights from logistic regression to interpret the importance of different\n",
    "features for each classification task. Explain your interpretation in detail. Why do you think\n",
    "some variables are more important?**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The weights show us that there are certain features that greatly dominate the classification of a dependent variable. ct_dst_src_ltm and dttl both have weights larger than most other features. ct_state_ttl being the only other standout feature of the graph above for the kitchen sink model. This tells us that the destination time to live (dttl) and the count of the  (dst_src_ltm) influence whether an attack is occuring more than any other feature. These variables are more important because during an internet attack, the destination of the attack will excert much more of the attack than the source delivering the attack. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "   # Support Vector Machines"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "('accuracy:', 0.93113081501275352)\n",
      "[[6852  553]\n",
      " [ 581 8480]]\n"
     ]
    }
   ],
   "source": [
    "# okay, so run through the cross validation loop and set the training and testing variable for one single iteration\n",
    "for train_indices, test_indices in cv_object: \n",
    "    # I will create new variables here so that it is more obvious what \n",
    "    # the code is doing (you can compact this syntax and avoid duplicating memory,\n",
    "    # but it makes this code less readable)\n",
    "    X_train = X[train_indices]\n",
    "    y_train = y[train_indices]\n",
    "    \n",
    "    X_test = X[test_indices]\n",
    "    y_test = y[test_indices]\n",
    "    \n",
    "X_train_scaled = scl_obj.transform(X_train) # apply to training\n",
    "X_test_scaled = scl_obj.transform(X_test) \n",
    "\n",
    "y_train2 = y_train.astype(float)\n",
    "X_train_scaled2 = X_train_scaled.astype(float)\n",
    "\n",
    "# train the model just as before\n",
    "svm_clf = SVC(C=0.5, kernel='linear', degree=3, gamma='auto') # get object\n",
    "svm_clf.fit(X_train_scaled, y_train)  # train object\n",
    "#svm_clf.fit(X_train_scaled2, y_train2)  # train object\n",
    "y_hat = svm_clf.predict(X_test_scaled) # get test set precitions\n",
    "\n",
    "acc = mt.accuracy_score(y_test,y_hat)\n",
    "conf = mt.confusion_matrix(y_test,y_hat)\n",
    "print('accuracy:', acc )\n",
    "print(conf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[  1.76182752e-03   1.77290559e+00   2.49225827e+00  -3.76292246e+00\n",
      "   -3.82703210e+00  -2.65244384e-01   4.18227103e-01   6.58995763e+00\n",
      "    2.16436520e-02  -2.12108534e+00   1.83824902e+00   1.18387078e+00\n",
      "   -2.62613969e-01  -3.16584603e-02  -1.55052476e-01   3.88933513e-01\n",
      "   -9.18024384e-01   5.22911435e-03   2.42670908e-03  -1.21123359e+00\n",
      "   -4.55245547e-01  -6.94479020e-01  -5.82816778e-02  -1.78552061e-02\n",
      "    1.20518052e+00  -2.09285147e-02   1.68404852e-02   9.80689962e-01\n",
      "    6.60288021e+00  -3.89114847e-01   2.84671783e+00   7.92760031e-01\n",
      "   -7.72409574e+00   2.26971316e-02   2.23017281e-02  -2.92716596e-01\n",
      "   -3.21476935e-01   1.84929188e+00  -1.72570291e-13   6.81266656e-02\n",
      "    8.62987988e-02   8.46807986e-02   1.56287173e-01   4.91708996e-02\n",
      "    6.64423627e-02  -1.78052018e-14   8.68101429e-02   6.97444784e-02\n",
      "    7.91059299e-02   6.61616133e-02   4.78716302e-02   8.86067205e-02\n",
      "    5.93621509e-02   7.06213756e-02   9.49849031e-02   9.52252960e-02\n",
      "    6.98694633e-02   6.57105386e-02   5.80231859e-02   6.81225425e-02\n",
      "    7.14822841e-02   8.79952114e-02   5.56263388e-02   7.97516823e-02\n",
      "    6.13949683e-02   7.90183636e-02   8.33378417e-02   6.98938375e-02\n",
      "    1.05927630e-01   3.97475169e-02   7.51814629e-02   1.37939821e+00\n",
      "    6.59801194e-02   7.38778478e-02   7.57685348e-02   8.85123346e-02\n",
      "    7.92835074e-02   8.05432375e-02   1.06659806e-01   6.78779942e-02\n",
      "   -1.17085095e-02   5.71588696e-02   7.41049057e-02   4.58434683e-02\n",
      "    7.87265775e-02   9.97820834e-02   8.83967223e-02   8.92870937e-02\n",
      "    4.58450188e-02   8.38758778e-02   1.13016679e-01   7.68230748e-02\n",
      "    8.57082827e-02   8.37391596e-02   8.92606770e-02   6.58970847e-02\n",
      "    6.43726876e-02   6.82666083e-02   9.41421008e-02   7.15347234e-02\n",
      "    7.51172184e-02   5.44928168e-02   7.79827156e-02   9.87586836e-02\n",
      "    7.67068107e-02   6.53999999e-02   6.78725492e-02   8.83400803e-02\n",
      "    8.92369326e-02   8.44839001e-02   7.57770414e-02   5.30603123e-02\n",
      "    5.89961082e-02   6.53099104e-02   7.92709977e-02   5.34594010e-02\n",
      "    3.24551743e-01   7.00758621e-02   8.35240900e-02   6.84736023e-02\n",
      "    6.23939551e-02   8.67223064e-02   8.74138880e-02   7.94816728e-02\n",
      "    5.82867030e-02   7.50554289e-02   8.23818181e-02   7.13662413e-02\n",
      "    1.61823417e-01   8.22253531e-02   7.81245399e-02   9.66337727e-02\n",
      "    6.92942235e-02   8.23740660e-02   1.43241932e+00   9.15992224e-02\n",
      "    6.78595865e-02   8.89143832e-02   7.92079758e-02   7.69530069e-02\n",
      "    8.52686202e-02   9.58122213e-02   7.45295577e-02   6.78697619e-02\n",
      "    8.20628040e-02   4.18466023e-02   9.64440726e-02   9.15851020e-02\n",
      "    8.14876923e-02   7.51862974e-02  -2.10749460e+00   7.81126441e-02\n",
      "    6.85696926e-02   6.82417704e-02   7.87964174e-02   7.10122907e-02\n",
      "    9.12835007e-01   1.27254011e+00   7.80024388e-02   6.53255216e-02\n",
      "    1.17641467e-01   7.11602779e-02   6.24120925e-02   7.99232160e-02\n",
      "    7.58583470e-02   1.00113427e-01   6.04982609e-02   8.63530286e-02\n",
      "    7.09031469e-02   5.65466090e-02  -3.54882550e+00   1.73104922e-01\n",
      "    4.92429878e+00  -9.34043875e-01   7.21300914e-01  -1.80895979e+00\n",
      "    7.83661330e-15   3.94371302e-01  -7.65164712e-02   1.16248737e+00\n",
      "   -9.50246826e-14  -4.66985452e-01  -1.12028442e-14   5.37789853e-02\n",
      "    7.44413212e-15  -2.39224410e+00   1.72931191e+00   5.96385936e-01\n",
      "   -3.31907308e+00   3.52625915e-15]]\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x41563160>"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nNIqIiEgSSvwiIiIVosQvIiJSIUr8IiIiFaLELyIiUiFK/CIiIhWixC8iIlIhSvwiIiIVosQvIiJS\nIUr8IiIiFaLELyIiUiFK/CIiIhWixC8iIlIhSvwiIiIVosQvIiJSIUr8IiIiFaLELyIiUiFK/CIi\nIhWixC8iIlIhSvwiIiIVosQvIiJSIUr8IiIiFaLELyIiUiFK/CIiIhWixC8iIlIhSvwiIiIVosQv\nIiJSIZPy3qGZLQWcDmwFPA0c5+7H530cERERGblO3PEfC7wReBewO3ComW3VgeOIiIjICOWa+M1s\nGWBHYE93v8PdfwocA+yR53FERERkdPK+438D0X3wx7ptNwAb5XwcERERGYW8E//LgP+6+6K6bY8B\nS5vZjJyPJSIiIiOUd+JfBni2YVvt56VyPpaIiIiMUN6j+p/hhQm+9vPT7eygu7uL7u6upr/v6elm\n3uz7RxddZt7s++np2ZBJk8Z23bNw4ULuuuvOlo/p7u5i2WWX5n//e4aBgcGmj1t77XWYPHnyhIon\nj+cKJubzVbZzU7Z4yvRclS2eMsUCeu2Mt3gg/8T/ELCCmXW7+0C2bSVggbs/2c4Opk+fSldX88T/\n9re/mXN6p4w50De84Q1jPoG33PI39v3Wj1huxqpj2s+82fdzzhFTeNOb3jSh4snruYKJ93yV7dyU\nLZ4yPVdli6dMsYBeO+MtHsg/8d8OPAe8Gbgx2/Z24JZ2dzBnzvyWd/wAq6++VtPf9fR009s7hb6+\nBfT3DzR93Pz5zzF//nPthjWkvr4FLDdjVZZfaY0x7ae2r7lz50+oeKD1cwXVfr7KdG7KFk/Znqsy\nxVOmWGr02ilPPNOmTR12P7kmfndfYGbfAc40s88BLwf2BbZrdx8DA4Mtmzra1d8/wKJFzV9geWj1\nAh7NvsYab9niKdvxxuv5Sf1cDKeKz1WZ4ilTLGU8XtnOT9nigQ5U7gP2ISr3XQM8BRyczecXERGR\nguWe+N19AbBD9k9ERERKRIv0iIiIVIgSv4iISIUo8YuIiFSIEr+IiEiFKPGLiIhUiBK/iIhIhSjx\ni4iIVIgSv4iISIUo8YuIiFSIEr+IiEiFKPGLiIhUiBK/iIhIhSjxi4iIVIgSv4iISIUo8YuIiFSI\nEr+IiEiFKPGLiIhUiBK/iIhIhSjxi4iIVIgSv4iISIUo8YuIiFSIEr+IiEiFKPGLiIhUiBK/iIhI\nhSjxi4iIVIgSv4iISIUo8YuIiFTIpDx3ZmYvBo4DPkxcVFwJ7O3uT+V5HBERERmdvO/4zwLWATYF\n3g+8Djg752OIiIjIKOWW+M1sGWAr4Avufru73w7sDXzUzCbndRwREREZvTzv+AeIJv476rZ1AT3A\nsjkeR0REREYptz5+d38G+HXD5r2Av7r7nLyOIyIiIqM3osRvZksDqzT59SPu/nTdY/cAtgY+MPrw\nREREJE8jvePfCLgWGBzidx8FrgAws92Bk4C93P23IzlAd3cX3d1dIwxrsZ6e7iW+dlKex+jp6WbS\npLHtr2zxtHuc+q8pjpXXvjp9flKem3ZU+bkqUzxlimUkx6n/muJYee1rIr12akaU+N39OoYZF2Bm\nXwaOAfZ191NHGtD06VPp6hp94q/p7Z0y5n2kPEZv7xSmTZs65n3kJY94Rnq88XSMlOcnxbkZiSo+\nV2WKp0yxjOZ44+kYE+21U5P3PP7tgKOJO/1TRrOPOXPmj/mOv7d3Cn19C+jvHxj1ftrR17cg133N\nnTt/zPvISx7xtCP18zVv9v1j3s+82fcnOT8pz03Z4inba7lMr52ynZt2VP21k5d24mnnwiC3xG9m\n04BTgAuBH5jZinW/fsLd23q2BwYGGRgYqidhZPr7B1i0qLMvsDxfwHnEW7Z4yna8NdecyTH7tD5G\nex9QG7DmmjOTnZ/Uz8VwqvjeKtNrp2znpmzHK9v5KVs8kO8d//uBqcB22T+I6XyDwKuAsV8ui4zB\n5MmTWW+99Vs+ZtKkbqZNm8rcufNLlWylWHrtyESS53S+S4FL89qfiIiI5K8cw4VFREQkiVwH94mI\niBQtr4GYsMHYgykhJX4REZkwZs5ch2P2af2Ydgdizpy5Tu7xlYESv4iITBgaiDk89fGLiIhUiBK/\niIhIhSjxi4iIVIgSv4iISIUo8YuIiFSIEr+IiEiFKPGLiIhUiBK/iIhIhSjxi4iIVIgSv4iISIUo\n8YuIiFSIEr+IiEiFKPGLiIhUiBK/iIhIhSjxi4iIVMikogMQERGZyObNvj+nfWww9mBQ4hcREemY\nmTPX4Zh9Wj+mp6eb3t4p9PUtoL9/oMmjNmDmzHVyiUmJX0REpEMmT57Meuut3/IxkyZ1M23aVObO\nnc+iRc0Sf37Uxy8iIlIhSvwiIiIVoqZ+EZFxpmyDxWR8UeIXERlHyjhYTMaXjiV+MzsNWMvdN+nU\nMUREqqaMg8VkfOlIH7+ZvRX4PDDYif2LiIjI6OR+x29mLwLOAm7Me99lpL42EREZTzrR1H8gcAfw\nT+CdHdh/aZSxr00XIiIi0kquid/M1iSa+N8A7J7nvsuobH1tZbwQERGRchlR4jezpYFVmvz6EaKJ\n/xB3f8LMxhqbjFDZLkRERKR8RnrHvxFwLUMP2jsQ6Hb3c8cSUHd3F93dXaP++56e7iW+Fk3xtKZ4\nmitTLJA2njyP0dPTzaRJ6WIuw/NVplhA8QwndTwjSvzufh1NZgKY2TXABmY2L9s0Gegxsz5iWt+D\n7Rxj+vSpdHWNPvHX9PZOGfM+8qR4WlM8zZUpFkgTT57H6O2dwrRpU3PbXzvHK4syxQKKZzip4smz\nj39boD7qvYANgW2Ah9vdyZw588d8xz98H3Y6ikfxTIRYUsfT17cg133NnTs/t/01U6bnq0yxKJ60\n8bRzkZtb4nf3R+p/NrM5wAJ3v28k+xkYGGRgYOzT//v7B0rVh614WlM8zZUpFkgTT54fxqnPX5me\nrzLFAopnOKniKUcHh4iIiCTRsZK97n5Yp/YtIiIio6M7fhERkQpR4hcREakQJX4REZEKUeIXERGp\nECV+ERGRClHiFxERqRAlfhERkQpR4hcREakQJX4REZEKUeIXERGpECV+ERGRClHiFxERqRAlfhER\nkQpR4hcREakQJX4REZEKUeIXERGpECV+ERGRClHiFxERqRAlfhERkQpR4hcREakQJX4REZEKUeIX\nERGpECV+ERGRClHiFxERqRAlfhERkQpR4hcREakQJX4REZEKmZT3Ds3sMGDXbN+XAV9094V5H0dE\nRERGLtc7fjM7APg88ElgU+DdwKF5HkNERERGL7c7fjPrBr4E7Ovu12XbDgG2y+sYIiIiMjZ5NvXP\nBGYAP61tcPeLgYtzPIaIiIiMQZ6J/9XAHGBjMzsKWIHo4/+K+vhFRETKYUSJ38yWBlZp8usXA1OB\nbwB7Z/s+ixhHsNcYYhQREZGcjPSOfyPgWmBwiN9tA0whRvHfAGBm+wIXMYLE393dRXd31wjDWqyn\np3uJr0VTPK0pnubKFAukjSfPY/T0dDNpUrqYy/B8lSkWUDzDSR3PiBJ/NmhvyMjM7B3EBYHX/wmw\ntJm9xN2faOcY06dPpatr9Im/prd3ypj3kSfF05riaa5MsUCaePI8Rm/vFKZNm5rb/to5XlmUKRZQ\n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\njTsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x41706438>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(svm_clf.coef_)\n",
    "weights = pd.Series(svm_clf.coef_[0],index=df.columns)\n",
    "temp_df = pd.DataFrame(weights)\n",
    "threshold = 2  # Changed threshold as 1 didn't filter enough, too hard to read\n",
    "temp_df = temp_df[(temp_df[0] > threshold) | (temp_df[0] < (-1 * threshold))]\n",
    "weights = temp_df[0]\n",
    "weights.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "E:\\anaconda\\envs\\py27\\lib\\site-packages\\ipykernel\\__main__.py:6: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n67w7Vyo7HDx6HNsbCbtovPWk24vHTeckK17i4aljFEvldT2HEKIvSFyKkMXVAjff9ihgytRuvKJ1\njHBdl5MrU3zv+IFK+V0rL7p+T6VT4Ic/9yAf+Nf7uUebssIXXLebrRNmkPLU6hSOa0aPdo00f26/\n5A9gatXcYEwmYrzYa+5w+MQin/3247iui+u6fPPACf7tW48BcOGOUXbtrcaYHcOtqyd2ebHvZGaK\n171YATC7lOeD/3Z/07bnjuvyrQMneP+nDpIvls1Iy89czSW7xnFdl3tn7ufDBz/OPzz4Tzw8Z77H\nT7tgE7/68iuxLFjJFvnTf76Xh5qMsEVRqezwuf98nL/93AOUyg7JhM1vvPLpXHWJ+fnmS3mOzB8n\nVzLlmc99+i5++cevqHyv/vz/3sud359q628h0Vv90OVvF3BGax28PTINpJVSW7TWs3X7Plj39dPA\nlV0+x/NG8JfYDwCVx4L7uMHt5j/zWN3xAtvnl7N87dD3+e7i1yujPG4hDYk8VqzEtxZu4YH/eJRX\nXvES1O7tpJNnf3k6rsv3Dk0xbz9Jylts97KJS876dVdsfhqnVqewJ2bZf+hJfmz+InZMNp935bgu\n5bLLV+9+kvz4E/iNTtXkZS2P/5RNF1c+Lk4+zq13HuXlz7mYmL32PQwTLP3ndDg+P8sjZ47z+Pwx\nprKnKFgZRmMTXDC6h33bLmXf9gsZG0q31aVJCNGSxKUu8uNMJVy4/j/N40jtttp96o/hxy3XhaVM\nnkePLfH5O55gftnMfX3VCy/DtqHs1N7kKjgFHp47zFef/CZHl6qL3l6xWfGiC3+Ip0xcTCJW2+Z6\nOJ3gF192OX/zmQdYzZW4/zHzstizdYSfef5TKvsdmDEvDwuLSyYuavo92ZzexERyjMXCMvdMH+SZ\nO67Dsixe8qwL2a9Pc3RqmVvvPMrdh2bAghlvtG0kHefNP3UVnz32/wDYmt7csvEFmBuBt5/8Lgv5\nRXbsKfCCa3fzzQMneeTYAu/6h+/y/Gt2c9HOMSwsTs6uctf3pznuze9JxG3e+tNXcfmFEzy2cIRb\nn/gKev5w5dj3zdzPDTuu5aUXv4jrnraNn3+x4pNf1iytFnjvvxzgqks286x9O7h45xiT4ynSyVjL\nmOi4Dq7r4rgOuXKeQj7PAnNkV4rYboxkLEnCjpOMJdcs8V+PZq/HZq/FymvOe405rtlrJVNkZiGL\n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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xce620b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n67w7Vyo7HDx6HNsbCbtovPWk24vHTeckK17i4aljFEvldT2HEKIvSFyKkMXVAjff9ihgytRuvKJ1\njHBdl5MrU3zv+IFK+V0rL7p+T6VT4Ic/9yAf+Nf7uUebssIXXLebrRNmkPLU6hSOa0aPdo00f26/\n5A9gatXcYEwmYrzYa+5w+MQin/3247iui+u6fPPACf7tW48BcOGOUXbtrcaYHcOtqyd2ebHvZGaK\n171YATC7lOeD/3Z/07bnjuvyrQMneP+nDpIvls1Iy89czSW7xnFdl3tn7ufDBz/OPzz4Tzw8Z77H\nT7tgE7/68iuxLFjJFvnTf76Xh5qMsEVRqezwuf98nL/93AOUyg7JhM1vvPLpXHWJ+fnmS3mOzB8n\nVzLlmc99+i5++cevqHyv/vz/3sud359q628h0Vv90OVvF3BGax28PTINpJVSW7TWs3X7Plj39dPA\nlV0+x/NG8JfYDwCVx4L7uMHt5j/zWN3xAtvnl7N87dD3+e7i1yujPG4hDYk8VqzEtxZu4YH/eJRX\nXvES1O7tpJNnf3k6rsv3Dk0xbz9Jylts97KJS876dVdsfhqnVqewJ2bZf+hJfmz+InZMNp935bgu\n5bLLV+9+kvz4E/iNTtXkZS2P/5RNF1c+Lk4+zq13HuXlz7mYmL32PQwTLP3ndDg+P8sjZ47z+Pwx\nprKnKFgZRmMTXDC6h33bLmXf9gsZG0q31aVJCNGSxKUu8uNMJVy4/j/N40jtttp96o/hxy3XhaVM\nnkePLfH5O55gftnMfX3VCy/DtqHs1N7kKjgFHp47zFef/CZHl6qL3l6xWfGiC3+Ip0xcTCJW2+Z6\nOJ3gF192OX/zmQdYzZW4/zHzstizdYSfef5TKvsdmDEvDwuLSyYuavo92ZzexERyjMXCMvdMH+SZ\nO67Dsixe8qwL2a9Pc3RqmVvvPMrdh2bAghlvtG0kHefNP3UVnz32/wDYmt7csvEFmBuBt5/8Lgv5\nRXbsKfCCa3fzzQMneeTYAu/6h+/y/Gt2c9HOMSwsTs6uctf3pznuze9JxG3e+tNXcfmFEzy2cIRb\nn/gKev5w5dj3zdzPDTuu5aUXv4jrnraNn3+x4pNf1iytFnjvvxzgqks286x9O7h45xiT4ynSyVjL\nmOi4Dq7r4rgOuXKeQj7PAnNkV4rYboxkLEnCjpOMJdcs8V+PZq/HZq/FymvOe405rtlrJVNkZiGL\nfnKeOx48xfyySZZGhuP8+iuezgU7h3loVrN/+gAHTj9AvlwgYSd4xvZreM6eZ3HDFXuJxa7ko7c8\nRDZf5u+/8BBf+d4xfvCqnVy6Z5xtE0MMpeIk4v0wBiJa6YeEahio713tf55a5771+60pFuvei/Ld\nX7mJY6VDYNX9gjb5rIG10TsSLfa3zr5PL//+tryZBTutp/F7L/0l7j72KP906J9x43nm0of46OOH\ncA9b4AZ/Ts1O2AXbwbJcUk81W0biw1y9/XLiZ/kZP2PX07nt2LexbAeuvI3/vf+b6zhxh8Qe8/18\n6qZL2T1eLS30X1P+v1vjk1y3/Srum3mQ+PZjfKXwEb5yW6zuePU/m8Dnlvm85ufkffmKO83U8iPc\nvfwNeBxcx/9eWU2/S0KsR7w8xu8/7y3snJg8+85t6Ob7bhec87gE3fsereRy/N7XPkA+Zjq6NY8K\n64w/Vl0ms+abzgZi2jriFrQZuy4Hf0LbJ05+mU9soAHdQ3Oah+ZME4a4Fas0IvIjvOO6jNzoUnYc\ncM35LdjwX+/4jLdH9Vou3/JUJoZaJzvP2HkNX3/ydh6cPcTbv/lOkrZJ4JyLXYb2lk2SiAsWpPG+\nZTa8+8AXK4nktTuuIh74w7s+Nl2740r+RX+Wslvmz+/+IKmhJCPPNOefB76SteBI5fYpXATpi7xY\nZLn83dEvwtHa8x5PjuG4DivFVfZPH2D/9AEsLJKxJOM3uhRLDi4uh4HDUxZMBb7Yi3WV15XlYm3w\nbyHXsQN/L7T6Wv/4LbYHWY3b1/26C7zWHOADj3wRHmncregUuWtqP3dN7cfCImbHGL3Rplh0cF1z\nR+az88DZmjBaNf9E0hYu4U9e9mtdO35Y77v9kFDlaAw8/uf1hbet9t1Iga41Pt69ucLve/Wbu3bs\nqHr5tmfy8uufeU6f84bJK/nUJR8O/bjB19Y7f/itoR9fCHFOnOu4BF2MTZOM8Mlf+MOuHFuE503P\nfh1vevbrunJs/7U1yQg3v+qvu/IcQpzP+uGW4Qlgq1IqeC47gazWun42/wnvMer2PYUQQggRDolL\nQggh1q0fEqoDQBH4gcC25wF3N9n3LuAH67Y9x9suhBBChEHikhBCiHWz+qGTiFLqw5gA9AZgL/AJ\n4PVa688rpXYAi1rrnFJqDHgUuBn4KPAm4JXAZVrrbE9OXgghRORIXBJCCLFe/TBCBfAO4B7g68CH\ngN/31v0AUzbxKgCt9TLw48APAfuBZwEvk6AlhBAiZBKXhBBCrEtfjFAJIYQQQgghxCDqlxEqIYQQ\nQgghhBg4klAJIYQQQgghRJskoRJCCCGEEEKINklCJYQQQgghhBBtkoRKCCGEEEIIIdoU7/UJ9JpS\n6m+AK7TWP9zrc9kopdQE8D5My14buBX4Ta31Yk9PbB2UUingb4FXABngfVrr9/f2rNqjlNoNfBD4\nYcy1fAp4p9a60NMT64BS6lZgWmv9hl6fy0YppZLAXwI/B+SBj2mt/0dvz6o9Sqm9wIcxLblngQ9o\nrT/Q27NaP+/3fD/wVq31t71tFwN/DzwbOAL8ltb6q706x34lsak3ohKbJC71n6jEpkGPS9Cd2HRe\nj1AppX4QswjjoPaO/zvgauClwIuBfZiFJQfBe4HrgRcAbwH+QCn1ip6eUfv+DUhjFgF9DfBy4I96\nekYdUEq9BnhZr8+jAx8EXgT8KPBa4FeUUr/S21Nq26eBZczvym8Cf6yU+snentL6eAHrZuCKuoc+\nB5wEngH8E/BZL0ALj8SmnopKbJK41H+iEpsGNi5B92LTeZtQKaUSmDf97/T6XNqhlBrG3EF7q9b6\ngNb6AOaF/dPeXZC+5Z37G4G3a60Peotlvgd4W2/PbOOUUgqzkOcvaq0f1lrfAfxPzJvlwFFKTWJ+\nFt/r9bm0wzv/NwC/rLW+R2v9DcwfSDf29sw2Tim1CXPe79ZaP6a1vgX4EiYg9zWl1D7gLuCSuu0v\nBC4Ffk0bfwbcifmZCSQ29VJUYpPEpf4Tldg0yHEJuhubztuECngncBD4Wq9PpE0OppziYGCbBcSA\n0Z6c0fpdgyk3vTOw7XYG7I3FMwW8VGt9JrDNAiZ6dD6dei9wE3Co1yfSpucCC1rr2/0NWuv3aK1/\nuYfn1K4ssAr8klIq7v2R9Bzg3t6e1ro8H7gNUzphBbbfCNyrtc4Ftt3u7ScMiU29E5XYJHGp/0Ql\nNg1yXIIuxqbzcg6VUupyTDnFNZgh/YHj/dC/Urf5N4D7tdZzPTiljdgFnNFalwLbpoG0UmqL1nq2\nR+e1Yd6cgEqNrVLKwtzNHLg/hrw7NM/DlOp8pMen065LgSNKqV8Afg9IAh8H/lhrPVDlU1rrvFLq\nbcBfY+7wx4CPa60/0dMTWwetdeX1Y+JtxS5MSUXQNCAlf0hs6gORiE0Sl/pSJGLTIMcl6G5simRC\npZRKA3taPHwKU07xP7XWp+u+oX3lbNehtc4E9n0b8ErgJefi3Do0jJmQGeR/njrH5xK2vwCuBW7o\n9YlshFdT/BHgLd4bZq9PqV2jwNOAXwV+EfMm+VHMHbW/7N1ptW0fcAvmDu3VwIeUUl/TWt/c29Nq\nW6vf/UH/vV8XiU19L6qxSeJS70UpNkUtLkEIsSmSCRVm6O4bNJ/Q+07A1lr/w7k9pbasdR0/jXlB\no5R6C/AB4De01redu9NrW47GF6n/eYYBpZT6c+DtwKu01oNWmvC/gLu11gN3B7NOCRgDfk5rfRxA\nKXUR8GYGLGgppV6Emc+xV2udB+7zJsi+CzOhdhDlgM1121IM8O/9Bkls6m+Ri00Sl/pGJGJTROMS\nhBCbIplQaa2/RYv5YUqprwM3KKWWvU1JIKaUWsK0qD1+jk7zrNa6Dp9S6ncwkzV/W2v91+fkxDp3\nAtiqlLK11o63bSeQ1Vov9PC82qaU+hDwa8DrtNaf6/X5tOHVwI7A70UKQCn1Sq31eO9Oa8NOAbm6\n32MNXNCj8+nE9cCjXtDy3YcpFxlUJ2jsrLQT83OLPIlNfS9SsUniUl+JSmyKYlyCEGLT+diU4nXA\nlZga9Wsww8l3ex/X10/2NaXU64E/x9z9G5g7HMABoAj8QGDb8zA/h4GjlPoDzDD+q7XWn+71+bTp\n+Zihe//34hbg897Hg+QuzHyHywLbrsCsKTFoTgKXKaWCN772AU/06HzCcBdwvVfK43uut/18J7Gp\n9yITmyQu9Z2oxKYoxiUIITZZrjswc+G6wnvTeb7W+oW9PpeN8FpwHgX+FVMqEnQ6cHetLymlPozp\nDPMGzKS/TwCv99rUDgyvBef9wJ9gFoOs0FpP9+SkQqCU+jjgDuICikqpWzBD92/B1KnfBPyh1vpv\nenpiG6SUGsd0tfoq8MfA5cDHMItzDkJZGABKKQd4gdb620opG9P97UHMmjg/gXn/urKfRmD6gcSm\n3ohCbJK41J+iEJuiEpcg/Nh0Po5QRcWLgRHg9Zg7BicxQ5MnGYyOWe8A7gG+DnwI+P1BClgBP4H5\nPXoXjT8H0RuvAw4D/4n5Y+iDgxSwfFrrJczaHrsw66+8DxN8BypoEZhn4/0x/ZOYUor9mHVxfkqS\nqUiR2NR7Epf608DHpgjFJQg5Np33I1RCCCGEEEII0S4ZoRJCCCGEEEKINklCJYQQQgghhBBtkoRK\nCCGEEEIIIdokCZUQQgghhBBCtEkSKiGEEEIIIYRokyRUQgghhBBCCNEmSaiEEEIIIYQQok2SUAkh\nhBBCCCFEmyShEkIIIYQQQog2SUIlhBBCCCGEEG2ShEoIIYQQQggh2vT/AUUF+BgulZUMAAAAAElF\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ae98cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# make a dataframe of the training data\n",
    "df_tested_on = df.iloc[train_indices] # saved from above, the indices chosen for training\n",
    "# now get the support vectors from the trained model\n",
    "df_support = df_tested_on.iloc[svm_clf.support_,:]\n",
    "\n",
    "df_support['label'] = y[svm_clf.support_] # add back in the 'Survived' Column to the pandas dataframe\n",
    "df['label'] = y # also add it back in for the original data\n",
    "\n",
    "# group the original data and the support vectors\n",
    "df_grouped_support = df_support.groupby(['label'])\n",
    "df_grouped = df.groupby(['label'])\n",
    "\n",
    "# plot KDE of Different variables\n",
    "#vars_to_plot = ['Age','Pclass','IsMale','FamilySize']\n",
    "vars_to_plot = ['ct_state_ttl', 'ct_state_ttl']\n",
    "\n",
    "for v in vars_to_plot:\n",
    "    plt.figure(figsize=(10,4))\n",
    "    # plot support vector stats\n",
    "    plt.subplot(1,2,1)\n",
    "    ax = df_grouped_support[v].plot.kde() \n",
    "    plt.legend(['Normal','Attack'])  # how do we not the correct order?\n",
    "    plt.title(v+' (Instances chosen as Support Vectors)')\n",
    "    \n",
    "    # plot original distributions\n",
    "    plt.subplot(1,2,2)\n",
    "    ax = df_grouped[v].plot.kde() \n",
    "    plt.legend(['Normal','Attack'])\n",
    "    plt.title(v+' (Original)')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## SVM Analysis:\n",
    "We can see that the separation in distributions is not as great as the separation for the original data. This is because the support vectors tend to be instances on the edge of the class boundaries and also instances that are classified incorrectly in the training data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# Five-Features Model SVM:\n",
    "# okay, so run through the cross validation loop and set the training and testing variable for one single iteration\n",
    "for train_indices, test_indices in cv_object_five: \n",
    "    # I will create new variables here so that it is more obvious what \n",
    "    # the code is doing (you can compact this syntax and avoid duplicating memory,\n",
    "    # but it makes this code less readable)\n",
    "    X_train = X[train_indices]\n",
    "    y_train = y[train_indices]\n",
    "    \n",
    "    X_test = X[test_indices]\n",
    "    y_test = y[test_indices]\n",
    "    \n",
    "X_train_scaled = scl_obj.transform(X_train) # apply to training\n",
    "X_test_scaled = scl_obj.transform(X_test) \n",
    "\n",
    "svm_clf = SVC(C=0.5, kernel='linear', degree=3, gamma='auto') # get object\n",
    "svm_clf.fit(X_train_scaled, y_train)  # train object\n",
    "\n",
    "y_hat = svm_clf.predict(X_test_scaled) # get test set precitions\n",
    "\n",
    "acc = mt.accuracy_score(y_test,y_hat)\n",
    "conf = mt.confusion_matrix(y_test,y_hat)\n",
    "print('accuracy:', acc )\n",
    "print(conf)\n",
    "\n",
    "weights = pd.Series(svm_clf.coef_[0],index=df.columns)\n",
    "weights.plot(kind='bar')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# group the original data and the support vectors\n",
    "df_grouped_support = df_support.groupby(['label'])\n",
    "df_grouped = df.groupby(['label'])\n",
    "\n",
    "# plot KDE of Different variables\n",
    "vars_to_plot = ['sttl','ct_dst_sport_ltm','ct_src_dport_ltm','swin','dwin']\n",
    "\n",
    "for v in vars_to_plot:\n",
    "    plt.figure(figsize=(10,4))\n",
    "    # plot support vector stats\n",
    "    plt.subplot(1,2,1)\n",
    "    ax = df_grouped_support[v].plot.kde() \n",
    "    plt.legend(['No Attack','Attack'])\n",
    "    plt.title(v+' (Instances chosen as Support Vectors)')\n",
    "    \n",
    "    # plot original distributions\n",
    "    plt.subplot(1,2,2)\n",
    "    ax = df_grouped[v].plot.kde() \n",
    "    plt.legend(['No Attack','Attack'])\n",
    "    plt.title(v+' (Original)')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Running logistic regression and vary some parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# run logistic regression and vary some parameters\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn import metrics as mt\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "# ref\": http://stackoverflow.com/questions/15707056/get-time-of-execution-of-a-block-of-code-in-python-2-7\n",
    "import timeit\n",
    "\n",
    "# first we create a reusable logisitic regression object\n",
    "#   here we can setup the object with different learning parameters and constants\n",
    "penaltyVals = ('l2', 'l1')\n",
    "for penVal in penaltyVals:\n",
    "    start_time = timeit.default_timer()\n",
    "    lr_clf = LogisticRegression(penalty=penVal, C=1.0, class_weight=None) # get object\n",
    "    accuracies = cross_val_score(lr_clf, X, y=y, cv=cv_object) # this also can help with parallelism\n",
    "    elapsed = timeit.default_timer() - start_time\n",
    "    #print(accuracies)\n",
    "    print \"Penalty value (\" + penVal + \") Average Accuracy across \" + str(num_cv_iterations) + \" shuffle split cross validation iterations = \" + str(np.average(accuracies)) + \" elasped time in seconds \" + str(elapsed)\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Run 1 (order:, l1, l2)\n",
    "Penalty value (l1) Average Accuracy across 3 shuffle split cross validation iterations = 0.923316733471 elasped time in seconds 882.909233884\n",
    "Penalty value (l2) Average Accuracy across 3 shuffle split cross validation iterations = 0.754949593101 elasped time in seconds 4.85387517498\n",
    "\n",
    "Run 2( order: l2, l1)\n",
    "Penalty value (l2) Average Accuracy across 3 shuffle split cross validation iterations = 0.752297663873 elasped time in seconds 5.01155646727\n",
    "Penalty value (l1) Average Accuracy across 3 shuffle split cross validation iterations = 0.921555528564 elasped time in seconds 865.148999092\n",
    "\n",
    "Note: not really sure if the research below really helps to explain our results. \n",
    "\n",
    "Reference for background on l1 and l2 for predition:\n",
    "https://www.quora.com/What-is-the-difference-between-L1-and-L2-regularization\n",
    "Typically ridge or ℓ2 penalties are much better for minimizing prediction error rather than ℓ1 penalties. The reason for this is that when two predictors are highly correlated, ℓ1 regularizer will simply pick one of the two predictors. In contrast, the ℓ2 regularizer will keep both of them and jointly shrink the corresponding coefficients a little bit. Thus, while the ℓ1 penalty can certainly reduce overfitting, you may also experience a loss in predictive power. \n",
    "\n",
    "ref: https://www.youtube.com/watch?v=sO4ZirJh9ds\n",
    "Says L1 encourages some level of sparsity which makes model more efficient to store, compute and reveal which features are most important to the prediction. \n",
    "\n",
    "ref: https://www.youtube.com/watch?v=nmHNXsDPPFQ\n",
    "Really good video on under, \"just right\" and overfitting (logistic regression)\n",
    "\n",
    "Ref: http://scikit-learn.org/stable/modules/sgd.html\n",
    "According to the reference above, Stochastic Gradient Descent is applicable to applicable to large scale and sparse machine learning problems where observations with more than 10^5 training examples and more than 10^5 features. In our case, we are not dealing with 82332 observations x 45  features from the raw original dataset.  In computing the model for logistic regression in the worst case runtime emperically run, it has taken about 866 seconds or 14 minutes."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Advantages of each model for each classification task\n",
    "\n",
    "Advantages of Logistic Regression are: 1) provides various ways to regularize a statistical model to prevent overfitting of the training model. 2) feature correlation is not as important. 3) provides a probabilistic interpretation. 4) allows for a model to be easily updated with new data. 5) can be used when the number of features is large and the training examples are small.\n",
    "\n",
    "Advantages of Support Vector Machines are: 1) offers theoretical guarantees against overfitting the model. 2) can be used when the data is not linearly separable, using the appropriate kernel. 3) can be used when the number of features are smaller than the number of training examples, using the Gaussian or RBF kernel. 4) outperforms at identifying complex data boundaries.  5) generalizes well once the hyperplane is determined.\n",
    "\n",
    "We can empiracally determine that the LR is much more efficient that the SVM models, with the LR models taking less than a minute to compute on our hardware, while the SVMs took more than 10 minutes each on a modern personal computer. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We did run the Five-Feature model through all the kernels that were available and found that the RBF kernel provided the best accuracy for this model at 82.0%"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Kernel = rbf for the Five-Feature model:\n",
    "for train_indices, test_indices in cv_object_five: \n",
    "    # I will create new variables here so that it is more obvious what \n",
    "    # the code is doing (you can compact this syntax and avoid duplicating memory,\n",
    "    # but it makes this code less readable)\n",
    "    X_train = X[train_indices]\n",
    "    y_train = y[train_indices]\n",
    "    \n",
    "    X_test = X[test_indices]\n",
    "    y_test = y[test_indices]\n",
    "    \n",
    "X_train_scaled = scl_obj.transform(X_train) # apply to training\n",
    "X_test_scaled = scl_obj.transform(X_test) \n",
    "\n",
    "# train the model just as before / Kernal=rbf\n",
    "svm_clf = SVC(kernel='rbf') # get object\n",
    "svm_clf.fit(X_train_scaled, y_train)  # train object\n",
    "\n",
    "y_hat = svm_clf.predict(X_test_scaled) # get test set precitions\n",
    "\n",
    "acc = mt.accuracy_score(y_test,y_hat)\n",
    "conf = mt.confusion_matrix(y_test,y_hat)\n",
    "print('accuracy:', acc )\n",
    "print(conf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "accuracy: 0.819821461104\n",
    "[[6393  971]\n",
    " [1996 7107]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "SVMs for the different parameters and kernels for the Kitchen Sink Model:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# lets investigate SVMs on the data and play with the parameters and kernels\n",
    "from sklearn.svm import SVC\n",
    "# ref: http://scikit-learn.org/stable/modules/svm.html\n",
    "\n",
    "# train the model just as before\n",
    "\n",
    "kernelVals = ('linear', 'poly', 'rbf', 'sigmoid') \n",
    "degreeVals = (1, 2, 3, 4)  # Degree of the polynomial kernel function (‘poly’). Ignored by all other kernels.\n",
    "for kernelVal in kernelVals:\n",
    "    for degreeVal in degreeVals:\n",
    "        start_time = timeit.default_timer()\n",
    "        svm_clf = SVC(C=0.5, kernel=kernelVal, degree=degreeVal, gamma='auto') # get object\n",
    "        svm_clf.fit(X_train_scaled, y_train)  # train object\n",
    "        #svm_clf.fit(X_train_scaled2, y_train2)  # train object\n",
    "        y_hat = svm_clf.predict(X_test_scaled) # get test set precitions\n",
    "\n",
    "        acc = mt.accuracy_score(y_test,y_hat)\n",
    "        conf = mt.confusion_matrix(y_test,y_hat)\n",
    "        elapsed = timeit.default_timer() - start_time\n",
    "        \n",
    "        print('accuracy:', acc )\n",
    "        print \"kernel Vals (\" + kernelVal + \") Degree Val (\" + str(degreeVal) + \") Average Accuracy across \" + str(num_cv_iterations) + \" shuffle split cross validation iterations = \" + str(acc) + \" elasped time in seconds \" + str(elapsed)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`('accuracy:', 0.93380298797522165)\n",
    "kernel Vals (linear) Degree Val (1) Average Accuracy across 3 shuffle split cross validation iterations = 0.933802987975 elasped time in seconds 565.340272169\n",
    "('accuracy:', 0.93380298797522165)\n",
    "kernel Vals (linear) Degree Val (2) Average Accuracy across 3 shuffle split cross validation iterations = 0.933802987975 elasped time in seconds 563.470504869\n",
    "('accuracy:', 0.93380298797522165)\n",
    "kernel Vals (linear) Degree Val (3) Average Accuracy across 3 shuffle split cross validation iterations = 0.933802987975 elasped time in seconds 560.159730786\n",
    "('accuracy:', 0.93380298797522165)\n",
    "kernel Vals (linear) Degree Val (4) Average Accuracy across 3 shuffle split cross validation iterations = 0.933802987975 elasped time in seconds 563.94064991\n",
    "('accuracy:', 0.89560306085266606)\n",
    "kernel Vals (poly) Degree Val (1) Average Accuracy across 3 shuffle split cross validation iterations = 0.895603060853 elasped time in seconds 520.913972599\n",
    "('accuracy:', 0.87720150613385162)\n",
    "kernel Vals (poly) Degree Val (2) Average Accuracy across 3 shuffle split cross validation iterations = 0.877201506134 elasped time in seconds 626.838469766\n",
    "('accuracy:', 0.86062188752581081)\n",
    "kernel Vals (poly) Degree Val (3) Average Accuracy across 3 shuffle split cross validation iterations = 0.860621887526 elasped time in seconds 830.176852918\n",
    "('accuracy:', 0.8328677274383578)\n",
    "kernel Vals (poly) Degree Val (4) Average Accuracy across 3 shuffle split cross validation iterations = 0.832867727438 elasped time in seconds 1162.60127933\n",
    "('accuracy:', 0.92025992955180369)\n",
    "kernel Vals (rbf) Degree Val (1) Average Accuracy across 3 shuffle split cross validation iterations = 0.920259929552 elasped time in seconds 519.948282173\n",
    "('accuracy:', 0.92025992955180369)\n",
    "kernel Vals (rbf) Degree Val (2) Average Accuracy across 3 shuffle split cross validation iterations = 0.920259929552 elasped time in seconds 523.602242189\n",
    "('accuracy:', 0.92025992955180369)\n",
    "kernel Vals (rbf) Degree Val (3) Average Accuracy across 3 shuffle split cross validation iterations = 0.920259929552 elasped time in seconds 522.028495109\n",
    "('accuracy:', 0.92025992955180369)\n",
    "kernel Vals (rbf) Degree Val (4) Average Accuracy across 3 shuffle split cross validation iterations = 0.920259929552 elasped time in seconds 524.807356343\n",
    "('accuracy:', 0.87076399854245112)\n",
    "kernel Vals (sigmoid) Degree Val (1) Average Accuracy across 3 shuffle split cross validation iterations = 0.870763998542 elasped time in seconds 444.834268771\n",
    "('accuracy:', 0.87076399854245112)\n",
    "kernel Vals (sigmoid) Degree Val (2) Average Accuracy across 3 shuffle split cross validation iterations = 0.870763998542 elasped time in seconds 453.045675398\n",
    "('accuracy:', 0.87076399854245112)\n",
    "kernel Vals (sigmoid) Degree Val (3) Average Accuracy across 3 shuffle split cross validation iterations = 0.870763998542 elasped time in seconds 455.094115902\n",
    "('accuracy:', 0.87076399854245112)\n",
    "kernel Vals (sigmoid) Degree Val (4) Average Accuracy across 3 shuffle split cross validation iterations = 0.870763998542 elasped time in seconds 453.934751164`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Analysis: most accurate combination of kernel was the linear kernel (93%) with second place 'rbf' with (92%) accuracy."
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [Root]",
   "language": "python",
   "name": "Python [Root]"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
